package com.unknowpupil.design.factory.impl;

import java.util.List;

/**
 * @Description: 方法层面的封装
 * <p>
 *     找到程序中的变化内容并将其与不变的内容区分开。
 * </p>
 * @Author: <a> w10g </a>
 * @CreateDate: Create in 2020/4/24 10:53
 * @Classname: DesginBegin
 * @Version: 1.0
 */
public class DesginBegin {
    /**
     *      假如你正在开发一个电子商务网站。 代码中某处有一个
     * getOrderTotal 获取订单总额 方法， 用于计算订单的总价
     * （包括税金在内）。
     *
     *      我们预计在未来可能会修改与税金相关的代码。税率会根据
     * 客户居住的国家/地区、州/省甚至城市而有所不同；而且一
     * 段时间后，实际的计算公式可能会由于新的法律或规定而修
     * 改。因此，你将需要经常性地修改 getOrderTotal 方法。不
     * 过仔细看看方法名称，连它都在暗示其不关心税金是如何计
     * 算出来的。
     */

   public  Double getOrderTotal(Order order){
       Double total = 0d;
       for (Order item:order.lineItems){
           total+=item.price*item.quantity;
           if(item.country.equals("US")){
               total += total * 0.07; // 美国营业税
           }
           else if(item.country.equals("EU")){
               total += total * 0.20; // 欧洲增值税
           }
       }
       return total;


    }


}
class Order{
    public List<Order> lineItems;
   public String country;
   public Double price;
   public Double quantity;
}


